package br.com.aerusc.gui.panel;

import java.util.logging.Logger;

import br.com.aerusc.entity.Associado;
import br.com.aerusc.filters.FiltroAssociado;
import br.com.aerusc.gui.components.RootComponents;
import br.com.aerusc.persistence.dao.AssociadoDAO;

import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.util.BeanContainer;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;

public class PanelListagemAssociados  extends Panel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static final String COMMON_FIELD_WIDTH = "16em";
	private static final Logger log = Logger.getLogger(PanelListagemAssociados.class.getName());
	private Table tableAssociados = new Table("Associados");
	private TextField fieldNome;
	private HorizontalLayout horizontalLayout;
	private BeanContainer<Long, Associado> beansAssociado;
	private Button buttonFiltrar;
	
	public PanelListagemAssociados(){
		horizontalLayout = new HorizontalLayout();
		Label labelNome = new Label("Nome :");
		labelNome.setWidth(COMMON_FIELD_WIDTH);
		fieldNome = new TextField();
		fieldNome.setImmediate(true);
		fieldNome.focus();
		fieldNome.setWidth(COMMON_FIELD_WIDTH);
		horizontalLayout.addComponent(labelNome);
		horizontalLayout.addComponent(fieldNome);
		addComponent(horizontalLayout);
		addComponent(GetButtonFiltrar());
		addComponent(getTableAssociados());
	}
	
	
	public BeanContainer<Long, Associado> getBeansAssociado(){
		beansAssociado = new BeanContainer<Long, Associado>(Associado.class);
		beansAssociado.setBeanIdProperty("id");
		return beansAssociado;
	}
	
	public Table getTableAssociados(){
		tableAssociados.setContainerDataSource(getBeansAssociado());
		tableAssociados.setWidth("100%");
		tableAssociados.setSelectable(true);
		tableAssociados.setImmediate(true);
		tableAssociados.setVisibleColumns(new String[] { "nome", "email", "numeroCarteira", "telefone" });
		tableAssociados.setColumnHeaders(new String[] { "Nome", "email", "Numero Carteira", "Telefone" });
		tableAssociados.addListener(new Property.ValueChangeListener() {
			public void valueChange(ValueChangeEvent event) {
				Long id = (Long) tableAssociados.getValue();
				AssociadoDAO dao = new AssociadoDAO();

				Associado associado = dao.recuperar(id);
				try {
					RootComponents.getHorizontalSplitLayout().setSecondComponent(new PanelCadastroAssociados(associado));
				} catch (Exception e) {
					log.warning(e.getMessage());
					return;
				}
			}
		});
		return tableAssociados;
	}
	
	public Button GetButtonFiltrar(){
		buttonFiltrar = new Button("Filtrar", new Button.ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				try{
					
				FiltroAssociado filtro = new FiltroAssociado();
				filtro.setNome(((String) fieldNome.getValue()).trim());
				AssociadoDAO dao = new AssociadoDAO();
				beansAssociado = getBeansAssociado();
				beansAssociado.addAll(dao.listarPorFiltro(filtro));
				tableAssociados.setContainerDataSource(beansAssociado);
				tableAssociados.setVisibleColumns(new String[] { "nome", "email", "numeroCarteira", "telefone" });
				tableAssociados.setColumnHeaders(new String[] { "Nome", "email", "Numero Carteira", "Telefone" });
				}catch (Exception e) {
					log.warning(e.getMessage());
				}
				}
		});
		buttonFiltrar.setClickShortcut(KeyCode.ENTER);
		return buttonFiltrar;
	}

}
